"""
增强RAG系统配置文件
可以根据需要调整各种参数和策略
"""

# 查询重写配置
QUERY_REWRITE_CONFIG = {
    # 是否启用查询重写
    "enabled": True,
    
    # 重写策略优先级（按顺序执行）
    "strategies": [
        "canonicalization",  # 规范化重写
        "paraphrasing",      # 同义改写
        "multi_query",       # 多查询生成
    ],
    
    # 每种策略的最大查询数
    "max_queries_per_strategy": {
        "canonicalization": 1,
        "paraphrasing": 3,
        "step_back": 1,
        "multi_query": 4,
        "decomposition": 3,
    },
    
    # 总查询数限制
    "max_total_queries": 5,
}

# 结果重排配置
RERANK_CONFIG = {
    # 是否启用结果重排
    "enabled": True,
    
    # 重排方法
    "method": "llm_scoring",  # llm_scoring, similarity, hybrid
    
    # 重排后保留的结果数
    "max_results_after_rerank": 10,
}

# 动态阈值配置
THRESHOLD_CONFIG = {
    # 基础阈值
    "base_threshold": 0.5,
    
    # 是否启用动态调整
    "dynamic_adjustment": True,
    
    # 不同查询类型的阈值调整系数
    "query_type_multipliers": {
        "general": 1.0,
        "follow_up": 0.7,      # 追问时降低阈值
        "clarification": 0.6,  # 澄清时进一步降低阈值
    },
    
    # 对话历史长度调整系数
    "history_length_multipliers": {
        "short": 1.2,   # < 500字符
        "medium": 1.0,  # 500-2000字符
        "long": 0.8,    # > 2000字符
    },
}

# 上下文管理配置
CONTEXT_CONFIG = {
    # 最大上下文长度（字符数）
    "max_context_length": 4000,
    
    # 是否启用上下文压缩
    "enable_compression": True,
    
    # 保留的最近对话轮数
    "max_recent_turns": 5,
    
    # 是否提取关键实体
    "extract_entities": True,
    
    # 关键实体最大数量
    "max_entities": 5,
}

# 检索配置
RETRIEVAL_CONFIG = {
    # 基础检索的top_k
    "base_top_k": 5,
    
    # 多查询检索时每个查询的top_k
    "multi_query_top_k": 3,
    
    # 是否启用去重
    "enable_deduplication": True,
    
    # 去重方法
    "deduplication_method": "content_hash",  # content_hash, similarity
}

# 提示词工程配置
PROMPT_CONFIG = {
    # 是否启用增强提示词
    "enhanced_prompts": True,
    
    # 提示词模板
    "templates": {
        "with_context": """基于以下相关日志信息和对话历史回答用户问题：

【相关日志信息】
{context}

【对话历史】
{conversation_history}

【用户问题】
{query}

请结合上述信息给出专业、准确的回答。如果日志中没有相关信息，请基于你的知识和对话历史回答。""",
        
        "without_context": """基于以下对话历史回答用户问题：

【对话历史】
{conversation_history}

【用户问题】
{query}

请基于对话历史给出连贯的回答。""",
    },
    
    # 是否在提示词中包含检索统计信息
    "include_retrieval_stats": False,
}

# 调试和监控配置
DEBUG_CONFIG = {
    # 是否启用调试日志
    "enable_debug_logs": True,
    
    # 是否返回调试信息
    "return_debug_info": True,
    
    # 调试信息包含的字段
    "debug_fields": [
        "original_query",
        "rewritten_queries", 
        "query_type",
        "retrieval_stats",
        "context_length",
    ],
}

# 性能配置
PERFORMANCE_CONFIG = {
    # 是否启用缓存
    "enable_caching": True,
    
    # 缓存超时时间（秒）
    "cache_timeout": 3600,
    
    # 是否启用并发处理
    "enable_concurrent_processing": True,
    
    # 最大并发数
    "max_concurrent_queries": 3,
}

# 错误处理配置
ERROR_CONFIG = {
    # 是否启用回退机制
    "enable_fallback": True,
    
    # 回退策略
    "fallback_strategies": [
        "basic_retrieval",  # 基础检索
        "no_retrieval",     # 无检索
    ],
    
    # 是否记录错误
    "log_errors": True,
    
    # 错误重试次数
    "max_retries": 2,
}
